package com.zzit.vjv.util;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 文件上传帮助类(用于多个文件)
 */
public class FilesUtil {


    /**
     * @param myfiles    上传文件的数据
     * @param request    请求:用于获取本地文件夹上下文
     * @param folderName 文件夹名称:用于命名新建的文件夹名称
     * @return
     */
    public static List numerousFile(MultipartFile[] myfiles, HttpServletRequest request, String folderName) throws IOException {

        //创建方法体全局变量用于存入多条地址
        List<Map<String,Object>> list = new ArrayList<>();


        for (MultipartFile myfile : myfiles) {

            if (myfile.isEmpty()) {

                System.out.println("没有文件数据");

            } else {

                System.out.println("文件长度: " + myfile.getSize() + "B");
                System.out.println("文件类型: " + myfile.getContentType());
                System.out.println("文件原名: " + myfile.getOriginalFilename());
                System.out.println("========================================");

                String uploadFileName = myfile.getOriginalFilename();

                //截取文件扩展名
                String extendName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1, uploadFileName.length());

                System.out.println("被截取的文件扩展名:" + extendName);

                //把文件加上随机数，防止文件重复
                String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();

                System.out.println("设定的随机数" + uuid);

                //给文件重新命名，防止出现重复，文件名称中文乱码
                String fileName = uuid + "." + extendName;


                //获取设置上传文件的目标位置
                String realPath = request.getSession().getServletContext().getRealPath("/" + folderName);
                System.out.println(realPath + "111111111111");

                //解决同一文件夹中文件过多问题
                String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());


                //  System.out.println("相对路径》》》》》》》》》》》》》"+sb.toString());

                //判断路径是否存在
                File file = new File(realPath + "/" + datePath);
                //如果目录不存在就创建目录
                if (!file.exists()) {
                    file.mkdirs();
                }

                //使用 MulitpartFile 接口中方法，把上传的文件写到指定位置
                myfile.transferTo(new File(file, fileName));


                //用于存储相对路径,与绝对路径
                Map<String,Object> map=new HashMap<>();


                //字符串拼接相对文件地址
                StringBuffer sb = new StringBuffer();

                sb.append("\\");
                sb.append(folderName);
                sb.append("\\");
                sb.append(datePath);
                sb.append("\\");
                sb.append(fileName);


                //相对路径
                map.put("xd",sb.toString());
                //绝对路径
                map.put("jd",file);


                //存入至list集合中
                list.add(map);


            }


        }



        return list;
    }


}
